package com.supermap.redis.tool;

import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Repository;

/**
 * 
* @ClassName: RedisToo 
* @Description: Redis工具类
* @author yuyao
* @date 2017年12月28日 上午11:36:58
 */
@Repository("RedisToo")
public class RedisToo {

    private ValueOperations<String, Object> valueOperations;

    @Resource(name = "redisTemplate")
    private RedisTemplate<String, Object> redisTemplate;
    
    //@PostConstruct表示初始化bean之前进行的操作，同理，@PreDestroy表示销毁bean之前进行的操作
    @PostConstruct
    private void init() {
        valueOperations = redisTemplate.opsForValue();
    }

    /**
     * 保存对象
     */
    public void save(RedisDtat data) {
        valueOperations.set(data.getId(), data, data.getCacheSeconds(), TimeUnit.SECONDS);
    }

    /**
     * 更新对象
     *
     * @param user 实例
     */
    public void update(RedisDtat data) {
        valueOperations.set(data.getId(), data, data.getCacheSeconds(), TimeUnit.SECONDS);
    }

    /**
     * 根据id查询对象
     *
     * @param key 实例uuid
     */
    public RedisDtat findOne(String key) {
        return  (RedisDtat) valueOperations.get(key);
    }

    /**
     * 查询所有对象
     */
    public List<Object> findAll() {
        Set<String> strs = redisTemplate.keys("*");
        return valueOperations.multiGet(strs);
    }
    
    /**
     * 模糊查询
     */
    public List<Object> likeAll(String key) {
        Set<String> strs = redisTemplate.keys("*" + key + "*");
        return valueOperations.multiGet(strs);
    }

    /**
     * 删除对象
     *
     * @param key 实例uids
     */
    public void delete(String key) {
        redisTemplate.delete(key);
    }

    /**
     * 获取token的有效期
     *
     * @param key
     */
    public long getExpireTime(String key) {
        long time = redisTemplate.getExpire(key);
        return time;
    }

    /**
     * 获取token的有效期---秒
     *
     * @param key
     * @return
     */
    public long getExpireTimeType(String key) {
        long time = redisTemplate.getExpire(key, TimeUnit.SECONDS);
        return time;
    }

    /**
     * 获取token的有效期---分
     *
     * @return
     */
    public long getExpireTimeTypeForMin(String key) {
        long time = redisTemplate.getExpire(key, TimeUnit.MINUTES);
        return time;
    }
}
